package com.yswy.common.enums.base;

import cn.hutool.core.util.ObjectUtil;
import com.yswy.common.enums.TfPlatformEnums;
import org.springframework.util.Assert;

/**
 * @author lijia
 * @description 类型枚举
 * @date 2020-12-02 17:02
 */
public interface TypeEnum {
    String name();
    int getCode();
    String getMessage();

    /**
     * 通过code获取对应的枚举类型
     *
     * @param enumType 枚举类型
     * @param code     code
     */
    static TypeEnum codeOf(Class<? extends TypeEnum> enumType, int code) {
        Assert.notNull(enumType, "enumType不能为null");
        Assert.isTrue(enumType.isEnum(), "enumType只能是枚举类型");
        TypeEnum[] enums = enumType.getEnumConstants();
        for (TypeEnum te : enums) {
            if (te.getCode() == code) {
                return te;
            }
        }
        return null;

    }

    /**
     * 通过message获取对应的枚举类型
     *
     * @param enumType 枚举类型
     * @param message  message
     */
    static TypeEnum messageOf(Class<? extends TypeEnum> enumType, String message) {
        Assert.notNull(enumType, "enumType不能为null");
        Assert.isTrue(enumType.isEnum(), "enumType只能是枚举类型");
        TypeEnum[] enums = enumType.getEnumConstants();
        for (TypeEnum te : enums) {
            if (te.getMessage().equals(message)) {
                return te;
            }
        }
        return null;
    }

    // 根据字符串查找对应的枚举常量
    static TypeEnum typeEnumOf(Class<? extends TypeEnum> enumType, String value) {
        Assert.notNull(enumType, "enumType不能为null");
        Assert.isTrue(enumType.isEnum(), "enumType只能是枚举类型");
        TypeEnum[] enums = enumType.getEnumConstants();
        for (TypeEnum engine : enums) {
            if (engine.name().equalsIgnoreCase(value)) {
                return engine;
            }
        }
        return null; // 如果找不到对应的枚举常量，可以根据需要返回适当的值或抛出异常
    }



    static Integer getCodeByMessage(Class<? extends TypeEnum> enumType, String message) {

        TypeEnum typeEnum = messageOf(enumType, message);
        return ObjectUtil.isEmpty(typeEnum) ? null : typeEnum.getCode();


    }

}
